<<< BACK NEXT >>>

ФОРМИРОВАНИЕ И РАБОТА С ТИПАМИ ПЕРЕМЕННЫХ

Для бестиповых (полиморфных) переменных машина CAPER перед выполнением той или иной операции осуществляет выравнивание типов в сторону повышения, за исключением одного случая - присвоения элементу массива значения переменной. В этом случае, если текущий тип переменной выше типа элемента массива, то машина CAPER понижает тип значения переменной до типа элемента массива.

Примеры:

  var1 := 10, var2 := 20.25
  var1 += var2 ;* var1 == 30.25  и имеет тип float.
     . . .
  arr1 := array( 'I', 1, 10, 20 )
     . . .
  arr1[ 5, 6] := var1 ;* arr1[5,6] == 30 - тип var1 будет понижен до integer

Возможно прямое преобразование числового типа переменной с помощью функции

  ConvertTo( <имя переменной>, <тип> ):

  var1 := 12.575 ;* float
  ConvertTo( @var1, 'I' ) ;* После чего значением var1 будет целое 12

  SizeOf( <тип> ) - возвращает размер типа в байтах.

  SizeOf( 'I' ) == 4
  SizeOf( 'D' ) == 8
  SizeOf( 'H' ) == 2
  SizeOf( 'B' ) == 1

   Для явно типизированных переменных выравнивание типов осуществляет компилятор. Невозможность приведения типов (например, попытка присвоения числовой переменной строки) сопровождается сообщением об ошибке компиляции.

   private <int> iVar1, iVar2:=0, <byte> bVar1 := 1’B

   iVar1 := bVar1   ;* присвоение с повышением типа (byte к int)

  
bVar1 := iVar2   ;* присвоение с понижением типа (int к byte)
СДВОЕННЫЕ И МНОЖЕСТВЕННЫЕ ЗНАЧЕНИЯ ПЕРЕМЕННЫХ

Память, выделяемая под переменные, позволяет определить свойство множественности значений переменной. Так, всякая переменная способна хранить два значения типа 'I', четыре значения типа 'H', восемь значений типа 'B'.
   В целях выделения этих значений введены функции:

   IntLeft( <выражение> ) - возвращает левую составляющую из сдвоенного значения выражения: число типа типа 'I'.

   IntRight( <выражение> ) - возвращает правую составляющую из сдвоенного значения выражения: число типа типа 'I'.

   aHalf( <выражение>, <индекс> ) - возвращает значение полуслова с номером <индекс>, который должен быть равен 1, 2, 3 или 4.

   aByte( <выражение>, <индекс> ) - возвращает значение байта с номером <индекс>, который должен быть в пределах от 1 до 8.

<<< BACK NEXT >>>